iT邦幫忙

2021 iThome 鐵人賽

DAY 3
0
DevOps

玩耍開源k8s30天系列 第 3

day3 : k8s建置(中)

  • 分享至 

  • xImage
  •  

昨天準備好了control center主機上所需要的各項工具,今天就可以來編寫iac的腳本了。

開始配置

terraform腳本基本上會由兩個元件組成provider和resources,provider定義要在哪個環境上做事,如我的範例使用gcp那麼最簡單的provider寫法如下

provider "google" {
  credentials = “service account key”
  project    = “project id”
  region     = “region name”
}

terraform在看到這個provider後會知道可以用這個service account在這個project id 的這個region上創建resources。

而resource的寫法範例如下

variable "instance_name" {}
variable "instance_zone" {}
variable “instance_type" {
default = "custom-8-16384-ext"
}

resource "google_compute_instance" "default" {
  name = "${var.instance_name}"
  zone = "${var.instance_zone}"
  machine_type = "${var.instance_type}"

  boot_disk {
    initialize_params {
      image = "centos-cloud/centos-7"
      size = 100
    }
  }

  network_interface {
    subnetwork = "default"
    access_config {
    }
  }

  metadata = {
    ssh-keys = "root:${file("/root/.ssh/id_rsa.pub")}"
  }

  metadata_startup_script = "sed -i 's/PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config ; systemctl restart sshd"
}

output "ip" {
  value = google_compute_instance.default.network_interface.0.network_ip
}

terraform會得到一個宣告的resource,請他產生一台主機名字和zone會由變數帶入,instance規格為8 core 16G,os使用centos7 並且容量為100G,網路設定為default,帶入目前主機的ssh key並且設定root可以遠端登入,完成的時候output ip,這樣就可以做為一個terraform的模板使用,讓我在剛剛定義的provider.tf中加入以這個module為框架的主機

module "create_ithome2021” {
  source        = “./lab”
  instance_name = “ithome-2021-1”
  instance_zone = "asia-east1-b"
}

這樣的寫法有一個好處,我只要在provider中加入三組同樣的module就可以得到三台同樣規格的主機,同時我需要新增別的module例如網路 防火牆的設定也可以很彈性的加入。

因為我沒有要講述複雜的網路使用情境,所以單純使用上述的module配置即可輕易的完成要建立k8s和之後需要擴充時所需要的主機。

那麼下一個問題是,如何輕易的重複利用這個provider宣告資源呢?

使用terraform apply之後,可以發現在當前的provider路徑下會得到一個terraform.tfstate,這個檔案說明了宣告的resources透過terraform創建出來的資訊,如果在同一個路徑下繼續創建資源,那麼原有的資源將會被覆蓋掉,但是對於terraform其實他的概念並不是覆蓋而是異動。

因此我使用了階層的方式進行管理讓彼此的resource獨立不互相影響,如下範例
https://ithelp.ithome.com.tw/upload/images/20210903/20139661SAfzAPTpK3.png

透過terraform可以輕鬆的佈建環境,但是風險就是要是不小心異動錯了,就會非常的痛,所以管理上一定要非常的小心,有了基本的環境後,明天就可以開始用ansible進行kuberbetes的安裝了。


上一篇
day2 : k8s建置(上)
下一篇
day4 : k8s建置(下)
系列文
玩耍開源k8s30天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言